﻿// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include "yqltest.h"
#include "类友元.h"
#include "文件读写.h"
#include "模板.h"
#include "排序.h"
#include <time.h>
#include "map容器.h"
#include <map>
#include <vector>
#include <functional>
#include <algorithm>
#include "Screen.h"
using namespace std;

void test01()
{
	goodGay gg;
	gg.visit();

}
//
//template<typename T, typename V>
//void templateTest(T a,V b) {	
//	cout << a << endl;
//	cout << b << endl;
//}

class yql {
	friend void yqltest(yql* yql) {
		cout << "全局友元测试" << endl;
	}

private:
	int id;
};



//void insert(int k[],int gap, int n)
//{
//	int inserted = k[n];
//	int j;
//	for (j = n - gap; j >= 0 && inserted < k[j];j-=gap) {
//		k[j + gap] = k[j];
//
//	}
//	k[j + gap] = inserted;
//}

void shellSort(int arr[], int n) {
	int h = 1;
	while (h < n / 3)
	{
		h = 3 * h + 1;
	}

	while (h >= 1)
	{
		for (int i = h; i < n; i++) {
			int e = arr[i];
			int j;
			for (j = i; j >= h && e < arr[j - h]; j -= h) {
				arr[j] = arr[j - h];
			}
			arr[j] = e;
		}
		h /= 3;
	}
}

void addArr(int arr[], int n) {
	unsigned seed;
	seed = time(0);
	srand(seed);
	for (int i = 0; i < n; i++) {
		arr[i] = rand() % 100 + 1;
	}

}

void testinsert() {
	//int a[6] = {3,3,2,2,1,1 };
	//insertSort(a, 6);
	//for (int i = 0; i < 6; i++)
	//{
	//	cout << a[i] << " ";
	//}
	const int n = 9;
	int a[n];

	addArr(a, n);

	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
	//insertSort(a, n);
	quickSort(a, 0, n - 1);

	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
}

void testMap() {
	map <int, int> m;
	m.insert(make_pair(1, 10));
	m.insert(make_pair(2, 20));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(3, 40));

	printMap(m);
	map<int, int>::iterator it = m.find(4);
	if (it != m.end())
	{
		cout << it->second << endl;
	}

}

void myPrint(int val)
{
	cout << val << " ";
}

void mergeTest()
{
	vector<int> v1;
	vector<int> v2;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
		v2.push_back(i + 2);

	}
	vector<int> vt;
	vt.resize(v1.size() + v2.size());
	merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vt.begin());

	for_each(vt.begin(), vt.end(), myPrint);
	cout << endl;


}


void testScreen() {
	cout << sizeof(Screen) << endl;

	size_t const N = 100;
	Screen* p[N];
	for (int i = 0; i < N;i++) {
		p[i] = new Screen(i);
	}
	for (int i = 0; i < 10; i++) {
		cout << p[i] << endl;
	}

	for (int i = 0; i < N; i++) {
		delete p[i];
	}
}

int main()
{
	//

	//testMap();
	//mergeTest();
	testScreen();
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
